home *** CD-ROM | disk | FTP | other *** search
/ CD Actual 2 / CD ACTUAL VOL 2.iso / programa / tunplus / tun / tunplus.mst < prev    next >
Encoding:
Text File  |  1995-09-21  |  62.3 KB  |  1,884 lines

  1. '*                       Tun PLUS 8.00 Setup Script
  2.  
  3. '$INCLUDE 'setupapi.inc'
  4. '$INCLUDE 'msdetect.inc'
  5.  
  6. GLOBAL WELCOMDLG$
  7. GLOBAL ASKCUSTOM$
  8. GLOBAL FINDINSTTYPE$
  9. GLOBAL ENCRYPTDLG$ 
  10. GLOBAL COPYFILES$ 
  11. GLOBAL ENCRYPTFILES$ 
  12. GLOBAL CREATEINIFILES$ 
  13. GLOBAL ADDPATH$
  14. GLOBAL ASKTCPCONF$
  15. GLOBAL RUNTCPCONF$
  16. GLOBAL CREATEGROUPS$ 
  17. GLOBAL szSN$
  18. GLOBAL szAK$
  19. GLOBAL szLS$
  20. GLOBAL DEST$    
  21.  
  22. '$INCLUDE 'setup.inc'
  23.  
  24. CONST WELCOME      = 100
  25. CONST ASKQUIT      = 200
  26. CONST DESTPATH     = 300
  27. CONST EXITFAILURE  = 400
  28. CONST EXITQUIT     = 600
  29. CONST EXITSUCCESS  = 700
  30. CONST OPTIONS      = 800
  31. CONST APPHELP      = 900
  32. CONST DIREXIST     = 1000
  33. CONST CUSTINST     = 6200
  34. CONST TOOBIG       = 6300
  35. CONST BADPATH      = 6400
  36. CONST CDGETNAMEORG = 7500
  37. CONST CDBADORG       = 7800
  38. CONST MODELESS       = 5000
  39. CONST MODELESS2       = 5001
  40. CONST ASKUPDATE       = 5003
  41. CONST ASKYESNOBACK = 5004
  42. CONST ASKYESNO       = 5005
  43. CONST CDBADFILE       = 7200
  44. CONST GETSERIALNUM = 1100
  45. CONST ODBCINSTALL  = 8100
  46. CONST ODBCBAD      = 8200
  47. CONST ODBCNODM     = 8300
  48. CONST ODBCBACK     = 8400
  49. CONST ASKDEMO      = 8500
  50.  
  51. CONST LOGO         = 1
  52.  
  53. CONST APPFILES     = 1
  54. CONST OPTFILES1    = 2
  55. CONST OPTFILES2    = 3
  56. CONST OPTFILES3    = 4
  57. CONST OPTFILES4    = 5
  58. CONST OPTFILES5    = 6
  59. CONST OPTFILES6    = 7
  60. CONST OPTFILES7    = 8
  61. CONST OPTFILES8    = 9
  62. CONST OPTFILES9    = 10
  63. CONST OPTFILES10    = 11
  64. CONST OPTFILES11    = 12
  65. CONST OPTFILES12    = 13
  66. CONST OPTFILES13    = 14
  67. CONST CRYPTFILES    = 100
  68. CONST CTL3DFILES    = 101
  69. CONST CONVERTFILES  = 102
  70.  
  71. GLOBAL DESTSQL$
  72. GLOBAL DESTKER$
  73. GLOBAL DESTTCP$
  74. GLOBAL DESTMAIL$
  75. GLOBAL DESTEMUL$
  76. GLOBAL DESTCOM$
  77. GLOBAL SETUPPROG$
  78. GLOBAL FILEPATH$
  79. GLOBAL WINDRIVE$
  80. GLOBAL OPT1OPT$
  81. GLOBAL OPT2OPT$
  82. GLOBAL OPT3OPT$
  83. GLOBAL OPT4OPT$
  84. GLOBAL OPT5OPT$
  85. GLOBAL OPT6OPT$
  86. GLOBAL OPT7OPT$
  87. GLOBAL OPT8OPT$
  88. GLOBAL OPT9OPT$
  89. GLOBAL OPT10OPT$
  90. GLOBAL OPT11OPT$
  91. GLOBAL OPT12OPT$
  92. GLOBAL OPT13OPT$
  93.  
  94. GLOBAL APPNEEDS$ 
  95. GLOBAL OPT1NEEDS$
  96. GLOBAL OPT2NEEDS$
  97. GLOBAL OPT3NEEDS$
  98. GLOBAL OPT4NEEDS$
  99. GLOBAL OPT5NEEDS$
  100. GLOBAL OPT6NEEDS$
  101. GLOBAL OPT7NEEDS$
  102. GLOBAL OPT8NEEDS$
  103. GLOBAL OPT9NEEDS$
  104. GLOBAL OPT10NEEDS$
  105. GLOBAL OPT11NEEDS$
  106. GLOBAL OPT12NEEDS$
  107. GLOBAL OPT13NEEDS$
  108. GLOBAL EXTRACOSTS$  ''List of extra costs to add per drive
  109. GLOBAL BIGLIST$     ''List of option files cost calc results (boolean)
  110.  
  111. GLOBAL CHECKSTATES$
  112. GLOBAL STATUSTEXT$
  113. GLOBAL DRIVETEXT$
  114.  
  115. GLOBAL DiskFileVersion$ 
  116. GLOBAL MasterFileVersion$ 
  117. GLOBAL TCPCONF$ 
  118. GLOBAL INSTALLEDKER%
  119. GLOBAL INSTALLKER%
  120. GLOBAL KERNELTYPE$ 
  121. GLOBAL INSTALLEDTCP%
  122. GLOBAL INSTALLTCP%
  123. GLOBAL INSTALLEDEMUL%
  124. GLOBAL INSTALLEMUL%
  125. GLOBAL INSTALLEDMAIL%
  126. GLOBAL INSTALLMAIL%
  127. GLOBAL INSTALLEDSQL%
  128. GLOBAL INSTALLSQL%
  129. GLOBAL INSTALLCRYPT%
  130. GLOBAL INSTALLCTL3D%
  131. GLOBAL INSTALLCONVERT%
  132. GLOBAL FINDTUNPATH%
  133.  
  134. DECLARE SUB RegisterCtl3d LIB "tunplus.dll" 
  135. DECLARE SUB OutputDebug LIB "tuncomm.dll" (szStr$)
  136. DECLARE SUB ShowMaximize LIB "tuncomm.dll" (hWnd%)
  137. DECLARE SUB AddOptFilesToCopyList (ftype%)
  138. DECLARE SUB RecalcOptFiles (ftype%)
  139. DECLARE SUB RecalcPath
  140. DECLARE SUB SetDriveStatus
  141. DECLARE FUNCTION CheckConfig LIB "tuncomm.dll" (szOld$, szNew$) AS INTEGER
  142. DECLARE FUNCTION CheckDriverManager LIB "tuncomm.dll" (szWinDir$, szWinSysDir$) AS INTEGER
  143. DECLARE FUNCTION InstallODBC LIB "tuncomm.dll" (hWnd%, szInstDir$, szOpt$) AS INTEGER
  144. DECLARE FUNCTION CreatIniConvert LIB "tuncomm.dll" (szPath$) AS INTEGER
  145.      
  146. DECLARE FUNCTION IsInstalled2 (szSection$,szKey$,szFile$,szPath$) AS INTEGER
  147. DECLARE FUNCTION IsInstalled (szSection$,szKey$,szFile$,szPath$) AS INTEGER
  148. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  149. DECLARE FUNCTION MakeString (i%) AS STRING
  150. DECLARE FUNCTION MakeDrive (i%) AS STRING
  151. DECLARE FUNCTION LookupApp (szAppName$) AS STRING
  152.  
  153. DECLARE FUNCTION CustomSetup LIB "tuncomm.dll" (frame%,szDir$)
  154. DECLARE FUNCTION AddTunDir LIB "tuncomm.dll" (szDir$) AS INTEGER
  155. DECLARE FUNCTION FindExistingPath LIB "tuncomm.dll" (szDir$) AS INTEGER
  156. DECLARE FUNCTION IsNewer (szVersion1$, szVersion2$) AS INTEGER
  157. DECLARE FUNCTION RemoveSysIniKey LIB "tuncomm.dll" (szFile$, szSection$, szEntry$, szKey$) AS INTEGER
  158. DECLARE FUNCTION MyAddSysIniKey LIB "tuncomm.dll" (szFile$, szSection$, szEntry$, szKey$) AS INTEGER
  159. DECLARE FUNCTION CreateSysFile LIB "tuncomm.dll" (szFile$) AS INTEGER
  160. DECLARE FUNCTION SaveFile LIB "tuncomm.dll" (szFile$) AS INTEGER
  161. DECLARE FUNCTION OutputStr LIB "tuncomm.dll" (szMsg$) AS INTEGER
  162. DECLARE FUNCTION OutputInt LIB "tuncomm.dll" (nVal%) AS INTEGER
  163. DECLARE FUNCTION CreatIniTcp LIB "tuncomm.dll" (KerTyp$,Path$,InstMail%,nLG%) AS INTEGER
  164. DECLARE FUNCTION CreatIniKer LIB "tuncomm.dll" (Path$,InstTcp%) AS INTEGER
  165. DECLARE FUNCTION CreatIniEmul LIB "tuncomm.dll" (Path$,nLG%) AS INTEGER
  166. DECLARE FUNCTION CreatIniMail LIB "tuncomm.dll" (Path$) AS INTEGER
  167. DECLARE FUNCTION CreatIniSql LIB "tuncomm.dll" (Path$) AS INTEGER
  168. DECLARE FUNCTION EncryptFile LIB "tuncomm.dll" (szPath$, szSer$, szKey$, szLi$) AS INTEGER
  169. DECLARE FUNCTION AddLangMenu LIB "tuncomm.dll" (szPath$) AS INTEGER
  170. DECLARE FUNCTION MyExitWindows LIB "tuncomm.dll" (nType%) AS INTEGER
  171.  
  172. INIT:
  173.     CUIDLL$ = "tunplus.dll"            ''custom user interface dll
  174.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  175.  
  176.     hWnd% = HwndFrame()
  177.     ShowMaximize hWnd%
  178.     SetBitmap CUIDLL$, LOGO
  179.     SetTitle "Tun PLUS - Installation"
  180.  
  181.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  182.     IF szInf$ = "" THEN
  183.         szInf$ = GetSymbolValue("STF_CWDDIR") + "TUNPLUS.INF"
  184.     END IF
  185.     ReadInfFile szInf$
  186.  
  187.     WINDRIVE$ = MID$(GetWindowsDir, 1, 1)
  188.     IF DEST$ = "" THEN
  189.       DEST$ = WINDRIVE$ + ":\TUN"
  190.     ENDIF
  191.  
  192.     '' ---- CustInst list symbols ----
  193.     CHECKSTATES$ = "CheckItemsState"
  194.     STATUSTEXT$  = "StatusItemsText"
  195.     DRIVETEXT$   = "DriveStatusText"
  196.     FOR i% = 1 TO 13 STEP 1
  197.         AddListItem CHECKSTATES$, "OFF"
  198.     NEXT i%
  199.     FOR i% = 1 TO 13 STEP 1
  200.         AddListItem STATUSTEXT$, ""
  201.     NEXT i%
  202.     FOR i% = 1 TO 7 STEP 1
  203.         AddListItem DRIVETEXT$, ""
  204.     NEXT i%
  205.     ReplaceListItem DRIVETEXT$, 7, DEST$
  206.  
  207.     '' ---- Disk cost list symbols ----
  208.     APPNEEDS$   = "AppNeeds"
  209.     OPT1NEEDS$  = "Opt1Needs"
  210.     OPT2NEEDS$  = "Opt2Needs"
  211.     OPT3NEEDS$  = "Opt3Needs"
  212.     OPT4NEEDS$  = "Opt4Needs"
  213.     OPT5NEEDS$  = "Opt5Needs"
  214.     OPT6NEEDS$  = "Opt6Needs"
  215.     OPT7NEEDS$  = "Opt7Needs"
  216.     OPT8NEEDS$  = "Opt8Needs"
  217.     OPT9NEEDS$  = "Opt9Needs"
  218.     OPT10NEEDS$  = "Opt10Needs"
  219.     OPT11NEEDS$  = "Opt11Needs"
  220.     OPT12NEEDS$  = "Opt12Needs"
  221.     OPT13NEEDS$  = "Opt13Needs"
  222.     EXTRACOSTS$ = "ExtraCosts"
  223.     BIGLIST$    = "BigList"
  224.     FOR i% = 1 TO 13 STEP 1
  225.         AddListItem BIGLIST$, ""
  226.     NEXT i%
  227.     FOR i% = 1 TO 26 STEP 1
  228.         AddListItem EXTRACOSTS$, "0"
  229.         AddListItem OPT1NEEDS$, "0"
  230.         AddListItem OPT2NEEDS$, "0"
  231.         AddListItem OPT3NEEDS$, "0"
  232.         AddListItem OPT4NEEDS$, "0"
  233.         AddListItem OPT5NEEDS$, "0"
  234.         AddListItem OPT6NEEDS$, "0"
  235.         AddListItem OPT7NEEDS$, "0"
  236.         AddListItem OPT8NEEDS$, "0"
  237.         AddListItem OPT9NEEDS$, "0"
  238.         AddListItem OPT10NEEDS$, "0"
  239.         AddListItem OPT11NEEDS$, "0"
  240.         AddListItem OPT12NEEDS$, "0"
  241.         AddListItem OPT13NEEDS$, "0"
  242.     NEXT i%
  243.  
  244.     '' ---- File Option Variables ----
  245.     OPT1OPT$ = "1"
  246.     OPT2OPT$ = "1"
  247.     OPT3OPT$ = "1"
  248.     OPT4OPT$ = "1"
  249.     OPT5OPT$ = "1"
  250.     OPT6OPT$ = "1"
  251.     OPT7OPT$ = "1"
  252.     OPT8OPT$ = "1"
  253.     OPT8OPT$ = "1"
  254.     OPT10OPT$ = "1"
  255.     OPT11OPT$ = "1"
  256.     OPT12OPT$ = "1"
  257.     OPT13OPT$ = "1"
  258.  
  259.     INSTALLKER% = 1
  260.     INSTALLEDKER% = 0 
  261.     KERNELTYPE$ = "BTN2" 
  262.     ReplaceListItem CHECKSTATES$, OPTFILES1 , "ON"
  263.  
  264.     DESTTCP$= MakePath( DEST$, "TCPW") 
  265.     DESTEMUL$= MakePath( DEST$, "EMUL") 
  266.     DESTMAIL$= MakePath( DEST$, "MAIL") 
  267.     DESTSQL$= MakePath( DEST$, "SQL")
  268.  
  269.     INSTALLEDTCP% = IsInstalled("TcpFiles","WFTP.EXE","WFTP.EXE",DESTTCP$)
  270.     INSTALLEDEMUL% = IsInstalled("EmulFiles","EMULWIN.EXE","EMULWIN.EXE",DESTEMUL$)
  271.     INSTALLEDMAIL% = IsInstalled("MailFiles","WMAIL2.EXE","BIN\WMAIL2.EXE",DESTMAIL$)
  272.     INSTALLEDSQL% = IsInstalled("SqlFiles","TUNODBC.DLL","DRIVER\TUNODBC.DLL",DESTSQL$)
  273.  
  274.     IF INSTALLEDTCP% <> 1 THEN
  275.       ReplaceListItem CHECKSTATES$, OPTFILES4 , "ON"
  276.     ENDIF
  277.     IF INSTALLEDEMUL% <> 1 THEN
  278.       ReplaceListItem CHECKSTATES$, OPTFILES5 , "ON"
  279.     ENDIF
  280.     IF INSTALLEDMAIL% <> 1 THEN
  281.       ReplaceListItem CHECKSTATES$, OPTFILES6 , "ON"
  282.     ENDIF
  283.     IF INSTALLEDSQL% <> 1 THEN
  284.       ReplaceListItem CHECKSTATES$, OPTFILES9 , "ON"
  285.     ENDIF
  286.     
  287.     RecalcPath
  288.     SetDriveStatus
  289.  
  290. '$IFDEF DEBUG
  291.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  292. '$ENDIF ''DEBUG
  293.  
  294.     RegisterCtl3d
  295.  
  296.  
  297. '' WELCOME
  298. ''   Display the welcome setup dialog
  299. IF WELCOMDLG$ <> "NO" THEN
  300. WELCOME:
  301.     sz$ = UIStartDlg(CUIDLL$, WELCOME, "FInfoDlgProc", 0, "" )
  302.     IF sz$ = "EXIT" THEN
  303.     GOSUB ASKQUIT
  304.     GOTO WELCOME
  305.     ELSEIF sz$ = "REACTIVATE" THEN
  306.     GOTO WELCOME
  307.     ENDIF
  308.     UIPop 1
  309. ENDIF
  310.  
  311.  
  312. '' CUSTINST
  313. ''   Display the custom setup dialog
  314. IF ASKCUSTOM$ <> "NO" THEN
  315. CUSTINST:
  316.     sz$ = UIStartDlg(CUIDLL$, CUSTINST, "FCustInstDlgProc", APPHELP, HELPPROC$)
  317.     IF sz$ = "CONTINUE" THEN
  318.         ''Install only if it will fit.
  319.         FOR i% = 1 TO 13 STEP 1
  320.             IF GetListItem(BIGLIST$, i%) <> "" THEN
  321.                 GOSUB TOOBIG
  322.                 GOTO CUSTINST
  323.             END IF
  324.         NEXT i%
  325.         IF GetListItem(CHECKSTATES$, OPTFILES10) = "ON" THEN
  326.                 opt1$ = "DRIVERMANAGER"
  327.         ELSE
  328.                 opt1$ = "NONE"
  329.         END IF
  330.         IF GetListItem(CHECKSTATES$, OPTFILES11) = "ON" THEN
  331.                 opt2$ = "SAMPLES"
  332.         ELSE
  333.                 opt2$ = "NONE"
  334.         END IF
  335. ''    GOTO CHECKDMVERSION
  336.         UIPop 1
  337.         GOTO INSTALL
  338.     ELSEIF sz$ = "PATH" THEN
  339.         GOTO GETPATH
  340.     ELSEIF sz$ = "BTN2" OR sz$ = "BTN3" OR sz$ = "BTN4" THEN
  341.     KERNELTYPE$ = sz$ 
  342.     RecalcOptFiles APPFILES
  343. ''    RecalcOptFiles OPTFILES2
  344. ''    RecalcOptFiles OPTFILES3
  345.     IF INSTALLEDKER% <> 1 THEN
  346.       RecalcOptFiles OPTFILES12
  347.     ENDIF
  348.     SetDriveStatus
  349.     GOTO CUSTINST
  350.     ELSEIF sz$ = "CHK5" THEN
  351.     RecalcOptFiles OPTFILES4
  352.     RecalcOptFiles APPFILES
  353.     SetDriveStatus
  354.     GOTO CUSTINST
  355.     ELSEIF sz$ = "CHK6" THEN
  356.     RecalcOptFiles OPTFILES5
  357.     SetDriveStatus
  358.     GOTO CUSTINST
  359.     ELSEIF sz$ = "CHK7" THEN
  360.     RecalcOptFiles OPTFILES6
  361.     RecalcOptFiles OPTFILES7
  362.     RecalcOptFiles OPTFILES8
  363.     SetDriveStatus
  364.     GOTO CUSTINST
  365.     ELSEIF sz$ = "CHK8" THEN
  366.     RecalcOptFiles OPTFILES7
  367.     SetDriveStatus
  368.     GOTO CUSTINST
  369.     ELSEIF sz$ = "CHK9" THEN
  370.     RecalcOptFiles OPTFILES8
  371.     SetDriveStatus
  372.     GOTO CUSTINST
  373.     ELSEIF sz$ = "CHK10" THEN
  374.     RecalcOptFiles OPTFILES9
  375.     RecalcOptFiles OPTFILES10
  376.     RecalcOptFiles OPTFILES11
  377.     SetDriveStatus
  378.     GOTO CUSTINST
  379.     ELSEIF sz$ = "CHK11" THEN
  380.     RecalcOptFiles OPTFILES10
  381.     SetDriveStatus
  382.     GOTO CUSTINST
  383.     ELSEIF sz$ = "CHK12" THEN
  384.     RecalcOptFiles OPTFILES11
  385.     SetDriveStatus
  386.     GOTO CUSTINST
  387.     ELSEIF sz$ = "REACTIVATE" THEN
  388.         RecalcPath
  389.         SetDriveStatus
  390.         GOTO CUSTINST
  391.     ELSE
  392.         GOSUB ASKQUIT
  393.         GOTO CUSTINST
  394.     END IF
  395. ENDIF
  396.  
  397.  
  398.  
  399. '' INSTALL
  400. ''   Start the installation
  401. INSTALL:
  402. ''      Init path sub-directory
  403.  
  404.     DESTKER$= MakePath( DEST$, "KERNELW")
  405.     DESTTCP$= MakePath( DEST$, "TCPW") 
  406.     DESTEMUL$= MakePath( DEST$, "EMUL") 
  407.     DESTMAIL$= MakePath( DEST$, "MAIL") 
  408.     DESTSQL$= MakePath( DEST$, "SQL")
  409.     DESTCOM$= MakePath( DEST$, "COMMON")
  410.  
  411. ''      Find type of installation
  412. IF GetListItem(CHECKSTATES$, OPTFILES1) = "ON" THEN
  413.   INSTALLKER% = 1
  414.   IF FINDINSTTYPE$ <> "NO" THEN
  415.  
  416.     INSTALLEDKER% = IsInstalled("KernelFiles","TUNTCPIP.DLL","TUNTCPIP.DLL",DESTKER$)
  417.  
  418.     IF INSTALLEDKER% = 1 THEN
  419. INSK1:
  420.       SetSymbolValue "TitleYesNoBack", "Update"
  421.       SetSymbolValue "MessageYesNoBack", "The same version of Tun KERNEL has been found. Do you want to overwrite it ?" 
  422.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  423.       UIPop 1
  424.       IF sz$ = "YES" THEN
  425.     INSTALLKER% = 1 
  426.       ELSEIF sz$ = "BACK" THEN
  427.     GOTO CUSTINST 
  428.       ELSEIF sz$ = "REACTIVATE" THEN
  429.         GOTO INSK1
  430.       ELSE
  431.     INSTALLKER% = 0
  432.       ENDIF
  433.     ELSEIF INSTALLEDKER% = 2 THEN
  434. INSK2:
  435.       SetSymbolValue "TitleYesNoBack", "Update"
  436.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun KERNEL has been found. Do you want to overwrite it ?" 
  437.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  438.       UIPop 1
  439.       IF sz$ = "YES" THEN
  440.     INSTALLKER% = 2 
  441.       ELSEIF sz$ = "BACK" THEN
  442.     GOTO CUSTINST 
  443.       ELSEIF sz$ = "REACTIVATE" THEN
  444.         GOTO INSK2
  445.       ELSE
  446.     INSTALLKER% = 0
  447.       ENDIF
  448.     ELSE
  449.       INSTALLKER% = 1
  450.     ENDIF
  451.   ENDIF
  452. ELSE
  453.   INSTALLKER% = 0
  454. ENDIF
  455.  
  456. INSTALLEDTCP% = 0
  457. IF GetListItem(CHECKSTATES$, OPTFILES4) = "ON" THEN
  458.   INSTALLTCP% = 1
  459.   IF FINDINSTTYPE$ <> "NO" THEN
  460.  
  461.     INSTALLEDTCP% = IsInstalled("TcpFiles","WFTP.EXE","WFTP.EXE",DESTTCP$)
  462.  
  463.     IF INSTALLEDTCP% = 1 THEN
  464. INST1:
  465.       SetSymbolValue "TitleYesNoBack", "Update"
  466.       SetSymbolValue "MessageYesNoBack", "The same version of Tun TCP has been found. Do you want to overwrite it ?" 
  467.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  468.       UIPop 1
  469.       IF sz$ = "YES" THEN
  470.         INSTALLTCP% = 1 
  471.       ELSEIF sz$ = "BACK" THEN
  472.         GOTO CUSTINST 
  473.       ELSEIF sz$ = "REACTIVATE" THEN
  474.         GOTO INST1
  475.       ELSE
  476.         INSTALLTCP% = 0
  477.       ENDIF
  478.     ELSEIF INSTALLEDTCP% = 2 THEN
  479. INST2:
  480.       SetSymbolValue "TitleYesNoBack", "Update"
  481.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun TCP has been found. Do you want to overwrite it ?" 
  482.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  483.       UIPop 1
  484.       IF sz$ = "YES" THEN
  485.         INSTALLTCP% = 2 
  486.       ELSEIF sz$ = "BACK" THEN
  487.         GOTO CUSTINST 
  488.       ELSEIF sz$ = "REACTIVATE" THEN
  489.         GOTO INST2
  490.       ELSE
  491.         INSTALLTCP% = 0
  492.       ENDIF
  493.     ELSE
  494.       INSTALLTCP% = 1
  495.     ENDIF
  496.   ENDIF
  497. ELSE
  498.   INSTALLTCP% = 0  
  499. ENDIF
  500.  
  501. INSTALLEDEMUL% = 0
  502. IF GetListItem(CHECKSTATES$, OPTFILES5) = "ON" THEN
  503.   INSTALLEMUL% = 1
  504.   IF FINDINSTTYPE$ <> "NO" THEN
  505.  
  506.     INSTALLEDEMUL% = IsInstalled("EmulFiles","EMULWIN.EXE","EMULWIN.EXE",DESTEMUL$)
  507.  
  508.     IF INSTALLEDEMUL% = 1 THEN
  509. INSE1:
  510.       SetSymbolValue "TitleYesNoBack", "Update"
  511.       SetSymbolValue "MessageYesNoBack", "The same version of Tun EMUL has been found. Do you want to overwrite it ?" 
  512.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  513.       UIPop 1
  514.       IF sz$ = "YES" THEN
  515.         INSTALLEMUL% = 1 
  516.       ELSEIF sz$ = "BACK" THEN
  517.         GOTO CUSTINST 
  518.       ELSEIF sz$ = "REACTIVATE" THEN
  519.         GOTO INSE1
  520.       ELSE
  521.         INSTALLEMUL% = 0
  522.       ENDIF
  523.     ELSEIF INSTALLEDEMUL% = 2 THEN
  524. INSE2:
  525.       SetSymbolValue "TitleYesNoBack", "Update"
  526.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun EMUL has been found. Do you want to overwrite it ?" 
  527.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  528.       UIPop 1
  529.       IF sz$ = "YES" THEN
  530.         INSTALLEMUL% = 2 
  531.       ELSEIF sz$ = "BACK" THEN
  532.         GOTO CUSTINST 
  533.       ELSEIF sz$ = "REACTIVATE" THEN
  534.         GOTO INSE2
  535.       ELSE
  536.         INSTALLEMUL% = 0
  537.       ENDIF
  538.     ELSE
  539.       INSTALLEMUL% = 1
  540.     ENDIF
  541.   ENDIF
  542. ELSE  
  543.   INSTALLEMUL% = 0
  544. ENDIF
  545.  
  546. INSTALLEDMAIL% = 0
  547. IF GetListItem(CHECKSTATES$, OPTFILES6) = "ON" THEN
  548.   INSTALLMAIL% = 1
  549.   IF FINDINSTTYPE$ <> "NO" THEN
  550.  
  551.     INSTALLEDMAIL% = IsInstalled("MailFiles","WMAIL2.EXE","BIN\WMAIL2.EXE",DESTMAIL$)
  552.  
  553.     IF INSTALLEDMAIL% = 1 THEN
  554. INSM1:
  555.       SetSymbolValue "TitleYesNoBack", "Update"
  556.       SetSymbolValue "MessageYesNoBack", "The same version of Tun MAIL has been found. Do you want to overwrite it ?" 
  557.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  558.       UIPop 1
  559.       IF sz$ = "YES" THEN
  560.         INSTALLMAIL% = 1 
  561.       ELSEIF sz$ = "BACK" THEN
  562.         GOTO CUSTINST 
  563.       ELSEIF sz$ = "REACTIVATE" THEN
  564.         GOTO INSM1
  565.       ELSE
  566.         INSTALLMAIL% = 0
  567.       ENDIF
  568.     ELSEIF INSTALLEDMAIL% = 2 THEN
  569. INSM2:
  570.       SetSymbolValue "TitleYesNoBack", "Update"
  571.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun MAIL has been found. Do you want to overwrite it ?" 
  572.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  573.       UIPop 1
  574.       IF sz$ = "YES" THEN
  575.         INSTALLMAIL% = 2 
  576.       ELSEIF sz$ = "BACK" THEN
  577.         GOTO CUSTINST 
  578.       ELSEIF sz$ = "REACTIVATE" THEN
  579.         GOTO INSM2
  580.       ELSE
  581.         INSTALLMAIL% = 0
  582.       ENDIF
  583.     ELSE
  584.       INSTALLMAIL% = 1
  585.     ENDIF
  586.   ENDIF
  587. ELSE
  588.   INSTALLMAIL% = 0
  589. ENDIF
  590.  
  591. INSTALLEDSQL% = 0
  592. IF GetListItem(CHECKSTATES$, OPTFILES9) = "ON" THEN
  593.   INSTALLSQL% = 1
  594.   IF FINDINSTTYPE$ <> "NO" THEN
  595.  
  596.     INSTALLEDSQL% = IsInstalled("SqlFiles","TUNODBC.DLL","DRIVER\TUNODBC.DLL",DESTSQL$)
  597.  
  598.     IF INSTALLEDSQL% = 1 THEN
  599. INSS1:
  600.       SetSymbolValue "TitleYesNoBack", "Update"
  601.       SetSymbolValue "MessageYesNoBack", "The same version of Tun SQL has been found. Do you want to overwrite it ?" 
  602.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  603.       UIPop 1
  604.       IF sz$ = "YES" THEN
  605.         INSTALLSQL% = 1 
  606.       ELSEIF sz$ = "BACK" THEN
  607.         GOTO CUSTINST 
  608.       ELSEIF sz$ = "REACTIVATE" THEN
  609.         GOTO INSS1
  610.       ELSE
  611.         INSTALLSQL% = 0
  612.       ENDIF
  613.     ELSEIF INSTALLEDSQL% = 2 THEN
  614. INSS2:
  615.       SetSymbolValue "TitleYesNoBack", "Update"
  616.       SetSymbolValue "MessageYesNoBack", "A previous version of Tun SQL has been found. Do you want to overwrite it ?" 
  617.       sz$ = UIStartDlg(CUIDLL$, ASKYESNOBACK, "FAskYesNoBackDlgProc", 0, "")
  618.       UIPop 1
  619.       IF sz$ = "YES" THEN
  620.         INSTALLSQL% = 2 
  621.       ELSEIF sz$ = "BACK" THEN
  622.         GOTO CUSTINST 
  623.       ELSEIF sz$ = "REACTIVATE" THEN
  624.         GOTO INSS2
  625.       ELSE
  626.         INSTALLSQL% = 0
  627.       ENDIF
  628.     ELSE
  629.       INSTALLSQL% = 1
  630.     ENDIF
  631.   ENDIF
  632. ELSE
  633.   INSTALLSQL% = 0
  634. ENDIF
  635.  
  636. INSTALLCRYPT%=1
  637. INSTALLCTL3D%=1
  638. INSTALLCONVERT%=1
  639. IF FINDINSTTYPE$ <> "NO" THEN
  640.  
  641. '' Tuncrypt ?
  642.   fInst% = IsInstalled2 ("CryptFiles","TUNCRYPT.DLL","TUNCRYPT.DLL",DESTCOM$)
  643.   IF fInst% <> 2 AND fInst% <> 4 THEN 
  644.      INSTALLCRYPT%=0
  645.   ENDIF
  646.  
  647. '' Convert ?
  648.   fInst% = IsInstalled2 ("ConvertFiles","CONVERT.DLL","CONVERT.DLL",DESTCOM$)
  649.   IF fInst% <> 2 AND fInst% <> 4 THEN 
  650.      INSTALLCONVERT%=0
  651.   ENDIF
  652.  
  653. '' CTL3D ?
  654.   fInst% = IsInstalled2 ("Ctl3dFiles","CTL3D.TUN","CTL3D.DLL",GetWindowsSysDir)
  655.   IF fInst% = 0 OR fInst% = 1 THEN 
  656.      INSTALLCTL3D%=0
  657.   ELSEIF fInst% = 2 THEN
  658.      INSTALLCTL3D%=2
  659.   ENDIF
  660. ENDIF
  661.  
  662. IF INSTALLSQL% <> 0 THEN
  663.   GOTO CHECKDMVERSION
  664. ENDIF
  665.  
  666. IF INSTALLKER%= 0 AND INSTALLTCP%= 0 AND INSTALLEMUL% = 0 AND INSTALLMAIL% = 0 AND INSTALLSQL% = 0 THEN
  667.   GOTO CUSTINST
  668. ENDIF
  669.  
  670. ''-------------------------------------------------------------------------
  671. '' SERIAL
  672. ''   Ask for serial number and activation key
  673. ''-------------------------------------------------------------------------
  674. SERIAL:
  675. IF ENCRYPTDLG$ <> "NO" THEN
  676.     sz$ = UIStartDlg(CUIDLL$, GETSERIALNUM, "FNameOrgDlgProc", APPHELP, HELPPROC$)
  677.     IF sz$ = "CANCEL" THEN
  678.       sz$ = UIStartDlg(CUIDLL$, CDBADORG, "FInfoDlgProc", 0, "" )
  679.       UIPop 1
  680.       GOTO SERIAL
  681.     ELSEIF sz$ = "EXIT" THEN
  682.       GOSUB ASKQUIT
  683.       GOTO SERIAL
  684.     ELSEIF sz$ <> "CONTINUE" THEN
  685.       GOTO SERIAL
  686.     ENDIF
  687.     szSN$ = GetSymbolValue( "NameOut" )
  688.     szAK$ = GetSymbolValue( "OrgOut" )
  689.     szLS$ = GetSymBolValue( "LicenseStringOut" )
  690.     szHEAD$ = MID$( szSN$, 4, 2 )
  691.     IF szHEAD$ <> "02" THEN
  692. BADF1:
  693.       sz$ = UIStartDlg(CUIDLL$, CDBADFILE, "FInfoDlgProc", 0, "" )
  694.       UIPop 1
  695.       IF sz$ = "EXIT" THEN
  696.           GOTO ASKQUIT
  697.           GOTO SERIAL
  698.           ELSEIF sz$ = "CONTINUE" THEN
  699.           GOTO SERIAL
  700.           ELSE
  701.               GOTO BADF1
  702.       ENDIF
  703.     ENDIF
  704.     UIPop 1
  705. ENDIF
  706.  
  707. '' COPYFILES
  708. ''   Create directory and copy files
  709. IF COPYFILES$ <> "NO" THEN
  710.     ClearCopyList
  711.     AddOptFilesToCopyList APPFILES
  712.     IF INSTALLKER% = 1 THEN
  713.        AddOptFilesToCopyList OPTFILES12
  714.     ENDIF
  715.     AddOptFilesToCopyList OPTFILES4
  716.     AddOptFilesToCopyList OPTFILES5
  717.     AddOptFilesToCopyList OPTFILES6
  718.     AddOptFilesToCopyList OPTFILES7
  719.     AddOptFilesToCopyList OPTFILES8
  720.     AddOptFilesToCopyList OPTFILES9
  721.     AddOptFilesToCopyList OPTFILES10
  722.     AddOptFilesToCopyList OPTFILES11
  723.     IF INSTALLCRYPT% = 1 THEN
  724.       AddOptFilesToCopyList CRYPTFILES
  725.     ENDIF
  726.     IF INSTALLCONVERT% = 1 THEN
  727.       AddOptFilesToCopyList CONVERTFILES
  728.     ENDIF
  729.     IF INSTALLCTL3D% <> 0 THEN
  730.       AddOptFilesToCopyList CTL3DFILES
  731.     ENDIF
  732.  
  733.     CreateDir DEST$, cmoNone
  734.     SetRestartDir MakePath( DEST$, "TMP")
  735.     CopyFilesInCopyList
  736.  
  737. ENDIF
  738. ''COPYFILES:
  739. ''    CreateDir DEST$, cmoNone
  740. ''    CopyFilesInCopyList
  741.  
  742.  
  743. ''-------------------------------------------------------------------------
  744. '' ENCRYPT
  745. ''   Encrypt executables and DLL
  746. ''-------------------------------------------------------------------------
  747. IF ENCRYPTFILES$ <> "NO" THEN
  748.  
  749. ENCRYPT:
  750.  
  751.     curs% = ShowWaitCursor()
  752.     
  753.     fEncryt%=EncryptFile(DESTCOM$, szSN$, szAK$, szLS$)
  754.  
  755.     RestoreCursor curs%
  756.  
  757. ENDIF
  758.  
  759. '' CHECKCONFIG
  760. ''   Check and Install CTL3D.DLL if required
  761.  
  762. CTL3D:
  763.    szNF$ = MakePath(DESTCOM$ , "CTL3D.TUN")
  764.    szOF$ = GetWindowsSysDir() + "CTL3D.DLL"
  765.    IF INSTALLCTL3D% = 2 THEN 
  766. CTL3D1:
  767.      sz$ = UIStartDlg(CUIDLL$, ASKUPDATE, "FAskUpdateDlgProc", 0, "")
  768.      IF sz$ = "YES" THEN
  769.        CopyFile szOF$, GetWindowsSysDir() + "CTL3D.OLD", cmoOverwrite, 0
  770.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  771.      ELSEIF sz$ = "REACTIVATE" THEN
  772.         GOTO CTL3D1
  773.      ENDIF
  774.      UIPop 1
  775.    ELSEIF INSTALLCTL3D% = 1 THEN
  776.        CopyFile szNF$, szOF$, cmoOverwrite, 0 
  777.    ENDIF
  778.  
  779. IF INSTALLSQL <> 0 THEN
  780. '' ASKDEMO
  781. ''   Ask the user for wich RDBMS he want to install DEMOS
  782. ASKDEMO:
  783.     IF opt2$ = "SAMPLES" THEN
  784.     sz$ = UIStartDlg(CUIDLL$, ASKDEMO, "FAskDemoDlgProc", 0, "")
  785.     IF sz$ = "CONTINUE" OR sz$ = "CANCEL" THEN
  786.         szDemoIfx$ = GetSymbolValue( "IfxCheckbox" )
  787.         szDemoOra$ = GetSymbolValue( "OraCheckbox" )
  788.         szDemoSyb$ = GetSymbolValue( "SybCheckbox" )
  789.         szDemoIse$ = GetSymbolValue( "IseCheckbox" )
  790.         UIPop 1
  791.     ELSEIF sz$ = "EXIT" THEN
  792.             GOSUB ASKQUIT
  793.             GOTO ASKDEMO
  794.     ELSEIF sz$ = "REACTIVATE" THEN
  795.             GOTO ASKDEMO
  796.     ENDIF
  797.     ENDIF
  798.  
  799.  
  800. '' SAVEDM
  801. ''   Save all driver manager components if required
  802. SAVEDM:
  803.     IF fSaveDM% = 1 THEN
  804.     curs% = ShowWaitCursor()
  805.     CreateDir MakePath(DESTSQL$, "ODBC.OLD"), cmoNone
  806.     szSrc$ = GetWindowsSysDir() + "ODBC.DLL"
  807.     IF DoesFileExist(szSrc$, femRead) THEN
  808.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBC.DLL")
  809.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  810.     ENDIF
  811.     szSrc$ = GetWindowsSysDir() + "ODBCINST.DLL"
  812.     IF DoesFileExist(szSrc$, femRead) THEN
  813.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.DLL")
  814.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  815.     ENDIF
  816.     szSrc$ = GetWindowsSysDir() + "ODBCCURS.DLL"
  817.     IF DoesFileExist(szSrc$, femRead) THEN
  818.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.DLL")
  819.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  820.     ENDIF
  821.     szSrc$ = GetWindowsSysDir() + "ODBCINST.HLP"
  822.     IF DoesFileExist(szSrc$, femRead) THEN
  823.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.HLP")
  824.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  825.     ENDIF
  826.     szSrc$ = GetWindowsDir() + "ODBCADM.EXE"
  827.     IF DoesFileExist(szSrc$, femRead) THEN
  828.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCADM.EXE")
  829.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  830.     ENDIF
  831.     szSrc$ = GetWindowsDir() + "ODBCINST.INI"
  832.     IF DoesFileExist(szSrc$, femRead) THEN
  833.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBCINST.INI")
  834.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  835.     ENDIF
  836.     szSrc$ = GetWindowsDir() + "ODBC.INI"
  837.     IF DoesFileExist(szSrc$, femRead) THEN
  838.         szDest$ = MakePath( DESTSQL$, "ODBC.OLD\ODBC.INI")
  839.             CopyFile szSrc$, szDest$, cmoOverwrite, 0 
  840.     ENDIF
  841.     RestoreCursor curs%
  842.     ENDIF
  843.  
  844.  
  845. '' INSTALLODBCDRIVER
  846. ''   Install ODBC driver
  847. INSTALLODBCDRIVER:
  848.     IF opt1$ = "DRIVERMANAGER" THEN
  849.         CopyFile MakePath( DESTSQL$, "BIN\TUNODBC.DLL"), MakePath( DESTSQL$, "DRIVER\TUNODBC.DLL"), cmoOverwrite, 0 
  850.         CopyFile MakePath( DESTSQL$, "BIN\TUNTRANS.DLL"), MakePath( DESTSQL$, "DRIVER\TUNTRANS.DLL"), cmoOverwrite, 0 
  851.         CopyFile MakePath( DESTSQL$, "BIN\TUNCS.DLL"), MakePath( DESTSQL$, "DRIVER\TUNCS.DLL"), cmoOverwrite, 0 
  852.         CopyFile MakePath( DESTSQL$, "BIN\TUNCSTIM.EXE"), MakePath( DESTSQL$, "DRIVER\TUNCSTIM.EXE"), cmoOverwrite, 0 
  853. INSTALLODBC:
  854.     hWnd% = HwndFrame()
  855.     nRc% = InstallODBC(hWnd%, DESTSQL$, opt1$)
  856.     IF nRc% = 0 THEN
  857.             GOSUB ASKQUIT
  858.             GOTO INSTALLODBC
  859.     END IF
  860.     ELSE
  861.     curs% = ShowWaitCursor()
  862.     '' ---- Copy files ----
  863.         CopyFile MakePath( DESTSQL$, "BIN\TUNODBC.DLL"), MakePath( GetWindowsSysDir(), "TUNODBC.DLL"), cmoOverwrite, 0 
  864.         CopyFile MakePath( DESTSQL$, "BIN\TUNTRANS.DLL"), MakePath( GetWindowsSysDir(), "TUNTRANS.DLL"), cmoOverwrite, 0 
  865.         CopyFile MakePath( DESTSQL$, "BIN\TUNCS.DLL"), MakePath( GetWindowsSysDir(), "TUNCS.DLL"), cmoOverwrite, 0 
  866.         CopyFile MakePath( DESTSQL$, "BIN\TUNCSTIM.EXE"), MakePath( GetWindowsSysDir(), "TUNCSTIM.EXE"), cmoOverwrite, 0 
  867.  
  868.     '' ---- Update ODBCINST.INI for Tun Driver ----
  869.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "ODBC Drivers", "Tun Driver", "Installed" ,cmoOverwrite
  870.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Driver", "Driver", MakePath( GetWindowsSysDir(), "TUNODBC.DLL" ), cmoOverwrite
  871.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Driver", "Setup", MakePath( GetWindowsSysDir(), "TUNODBC.DLL" ), cmoOverwrite
  872.  
  873.     '' ---- Update ODBCINST.INI for Tun Translator ----
  874.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "ODBC Translators", "Tun Translator", "Installed" ,cmoOverwrite
  875.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Translator", "Translator", MakePath( GetWindowsSysDir(), "TUNTRANS.DLL" ), cmoOverwrite
  876.         CreateIniKeyValue MakePath( GetWindowsDir(), "ODBCINST.INI"), "Tun Translator", "Setup", MakePath( GetWindowsSysDir(), "TUNTRANS.DLL" ), cmoOverwrite
  877.     RestoreCursor curs%
  878.     END IF
  879.  
  880. ENDIF
  881.  
  882. '' UPDATEINIFILES
  883. ''   Create or update entries in .INI files
  884. IF CREATEINIFILES$ <> "NO" THEN
  885.  
  886. UPDATEINIFILES:
  887.  
  888.    CursorSave% = ShowWaitCursor()
  889.     '' ---- Create / Update entries in TUN.INI ----
  890.  
  891.     szLG$ = MID$( szSN$, 3, 1 )
  892.     nLG% = (ASC(MID$(szSN$,6,1)) - ASC("0")) * 10 + (ASC(MID$(szSN$,7,1)) - ASC("0"))
  893.     IF DoesIniKeyExist( MakePath( GetWindowsDir(), "TUN.INI"), "Language", "Language") = 0 THEN
  894.     IF nLG% = 1 THEN
  895.         szLGN$= "01"
  896.     ELSEIF nLG% > 3 THEN
  897.         szLGN$ = MakeString(nLG% - 2 ) 
  898.     ELSE
  899.         szLGN$ ="00"
  900.     END IF
  901.         CreateIniKeyValue MakePath( GetWindowsDir(), "TUN.INI"), "Language", "Language", szLGN$ ,cmoOverwrite
  902.     END IF
  903.  
  904. IF INSTALLCRYPT% = 1 THEN
  905.   i%=AddLangMenu(DESTCOM$)
  906. ENDIF
  907.  
  908. IF INSTALLCONVERT% = 1 THEN
  909.   i%=CreatIniConvert(DESTCOM$)
  910. ENDIF
  911.  
  912. IF INSTALLKER% <> 0 THEN
  913.  i%= CreatIniKer(DESTKER$,INSTALLTCP%)
  914. ENDIF
  915.  
  916. IF INSTALLTCP% <> 0 THEN 
  917. '' Save file system.ini in system.XXX before modification
  918. '' Delete old and Add new TUNREDIR.386 or TUNNFS.386 
  919.  
  920.     i%= SaveFile( MakePath( GetWindowsDir(), "SYSTEM.INI"))
  921.     IF KERNELTYPE$ = "BTN2" THEN
  922.        i%= RemoveSysIniKey( MakePath( GetWindowsDir(), "SYSTEM.INI"), "386Enh", "device", "TUNNFS.386")
  923.        i%= RemoveSysIniKey( MakePath( GetWindowsDir(), "SYSTEM.INI"), "386Enh", "device", "TUNREDIR.386")
  924.        i%= MyAddSysIniKey( MakePath( GetWindowsDir(), "SYSTEM.INI"), "386Enh", "device", MakePath( DESTTCP$, "TUNREDIR.386"))
  925.  
  926.     ELSEIF KERNELTYPE$ = "BTN3" THEN
  927.        i%= RemoveSysIniKey( MakePath( GetWindowsDir(), "SYSTEM.INI"), "386Enh", "device", "TUNREDIR.386")
  928.        i%= RemoveSysIniKey( MakePath( GetWindowsDir(), "SYSTEM.INI"), "386Enh", "device", "TUNNFS.386")
  929.        i%= MyAddSysIniKey(MakePath( GetWindowsDir(), "SYSTEM.INI"), "386Enh", "device", MakePath( DESTTCP$, "TUNNFS.386"))
  930.  
  931.    ENDIF
  932. '' Create System files
  933.        i%= CreateSysFile(MakePath( DESTTCP$, "WLPD.INI"))
  934.        i%= CreateSysFile(MakePath( DESTTCP$, "WNFSD.INI"))
  935.        i%= CreateSysFile(MakePath( DESTTCP$, "WFTPD.INI"))
  936. ''      Modification/Creation of needed entries for NDD 
  937.  
  938. IF DoesIniKeyExist(MakePath(GetWindowsDir,"SYSTEM.INI"),"boot","network.drv") = 1 THEN
  939.    NDD$ = GetIniKeyString(MakePath(GetWindowsDir,"SYSTEM.INI"), "boot", "network.drv")
  940.    NDD$ = LCASE$(NDD$)
  941.    IF DoesIniKeyExist(MakePath(GetWindowsDir,"SYSTEM.INI"),"boot","secondnet.drv") = 1 THEN
  942.       SNDD$ = GetIniKeyString(MakePath(GetWindowsDir,"SYSTEM.INI"), "boot", "secondnet.drv")
  943.       SNDD$ = LCASE$(SNDD$)
  944.    END IF
  945. END IF
  946.  
  947. IF NDD$ <> "" THEN
  948.    IF INSTR(1, NDD$, "wfwnet.drv") THEN
  949.       IF SNDD$ <> "" THEN
  950.      IF INSTR(1 ,SNDD$ , "tuntcp.drv") OR INSTR(1, SNDD$, "tunnet.drv") THEN
  951.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", "secondnet.drv", MakePath(DESTTCP$,"TUNNET.DRV"), cmoOverwrite
  952.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot.description", "secondnet.drv", "Tun TCP ESKER (version 8.00)", cmoOverwrite
  953.      ELSE
  954.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", ";secondnet.drv", SNDD$, cmoOverwrite
  955.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", "secondnet.drv", MakePath(DESTTCP$,"TUNNET.DRV"), cmoOverwrite
  956.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot.description", "secondnet.drv", "Tun TCP ESKER (version 8.00)", cmoOverwrite
  957.         CreateIniKeyValue MakePath( DESTTCP$, "TUNNET.INI"), "Othernet", "Path", SNDD$, cmoOverwrite
  958.         CreateIniKeyValue MakePath( DESTTCP$, "TUNNET.INI"), "Othernet", "Enable", "Yes", cmoOverwrite
  959.         IF INSTR(1, SNDD$, "netware.drv") THEN
  960.           OTHERNETNAME$= "Novell"
  961.         ELSEIF INSTR(1,SNDD$, "lanman") THEN
  962.           OTHERNETNAME$= "LAN Manager"
  963.         ELSE
  964.           OTHERNETNAME$= "Other"
  965.         ENDIF
  966.         CreateIniKeyValue MakePath( DESTTCP$, "TUNNET.INI"), "Othernet", "Name", OTHERNETNAME$, cmoOverwrite
  967.      END IF
  968.       ELSE
  969.      CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", "secondnet.drv", MakePath(DESTTCP$,"TUNNET.DRV"), cmoOverwrite
  970.      CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot.description", "secondnet.drv", "Tun TCP ESKER (version 8.00)", cmoOverwrite
  971.       ENDIF
  972.    ELSE
  973.       IF INSTR(1 ,NDD$ , "tuntcp.drv") OR INSTR(1, NDD$, "tunnet.drv") THEN
  974.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", ";network.drv", NDD$ ,cmoOverwrite
  975.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", "network.drv", MakePath(DESTTCP$,"TUNNET.DRV"), cmoOverwrite
  976.       ELSE
  977.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", ";network.drv", NDD$ ,cmoOverwrite
  978.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", "network.drv", MakePath(DESTTCP$,"TUNNET.DRV"), cmoOverwrite
  979.         CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot.description", "network.drv", "Tun TCP ESKER (version 8.00)", cmoOverwrite
  980.         CreateIniKeyValue MakePath( DESTTCP$, "TUNNET.INI"), "Othernet", "Path", NDD$, cmoOverwrite
  981.         CreateIniKeyValue MakePath( DESTTCP$, "TUNNET.INI"), "Othernet", "Enable", "Yes", cmoOverwrite
  982.         IF INSTR(1, NDD$, "netware.drv") THEN
  983.            OTHERNETNAME$= "Novell"
  984.         ELSEIF INSTR(1,NDD$, "lanman") THEN
  985.            OTHERNETNAME$= "LAN Manager"
  986.         ELSE
  987.        OTHERNETNAME$= "Other"
  988.         ENDIF
  989.         CreateIniKeyValue MakePath( DESTTCP$, "TUNNET.INI"), "Othernet", "Name", OTHERNETNAME$, cmoOverwrite
  990.       ENDIF
  991.    ENDIF
  992. ELSE
  993.    CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot", "network.drv", MakePath(DESTTCP$,"TUNNET.DRV"), cmoOverwrite
  994.    CreateIniKeyValue MakePath( GetWindowsDir(), "SYSTEM.INI"), "boot.description", "network.drv", "Tun TCP ESKER (version 8.00)", cmoOverwrite
  995. END IF
  996.  
  997.  i%= CreatIniTcp(KERNELTYPE$,DESTTCP$,INSTALLMAIL%,nLG%)
  998.  
  999.  
  1000. ENDIF
  1001.  
  1002. IF INSTALLEMUL% <> 0 THEN
  1003.  i%= CreatIniEmul(DESTEMUL$,nLG%)
  1004. ENDIF
  1005.  
  1006. IF INSTALLMAIL% <> 0 THEN
  1007.  i%= CreatIniMail(DESTMAIL$)
  1008. ENDIF
  1009.  
  1010. IF INSTALLSQL% <> 0 THEN
  1011.  i%= CreatIniSql(DESTSQL$)
  1012. ENDIF
  1013.  
  1014.     RestoreCursor CursorSave%
  1015.  
  1016. ENDIF
  1017.  
  1018. ''
  1019. ''      Add Path of Tun KERNEL in AUTOEXEC.BAT
  1020. ''
  1021. FINDTUNPATH%=1
  1022. IF ADDPATH$ <> "NO" THEN
  1023.  
  1024. IF INSTALLKER% <> 0 THEN
  1025.   FINDTUNPATH% = FindExistingPath(DESTKER$)
  1026.   IF FINDTUNPATH% = 0 THEN
  1027.     i% = AddTunDir(DESTKER$)
  1028.   ENDIF
  1029. ENDIF
  1030. ENDIF
  1031.  
  1032. ''
  1033. ''     Ask to configure TCP/IP 
  1034. ''
  1035. TCPCONF$ = "NO"
  1036.  
  1037. IF ASKTCPCONF$ <> "NO" THEN
  1038.  
  1039. IF INSTALLKER% <> 0 THEN
  1040.     SetSymbolValue "MessageYesNo", "Do you want to configure TCP/IP now ? This can be done later running the Administrator"
  1041.     SetSymbolValue "TitleYesNo", "TCP/IP Configuration"
  1042. TCPCONF1:
  1043.     TCPCONF$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "" )
  1044.     IF TCPCONF$ = "REACTIVATE" THEN
  1045.         GOTO TCPCONF1
  1046.     ENDIF
  1047.     UIPop 1
  1048. ENDIF
  1049.  
  1050. ENDIF
  1051.  
  1052. IF CREATEGROUPS$ <> "NO" THEN
  1053.  
  1054. IF INSTALLKER% <> 0 AND INSTALLTCP% = 0 THEN
  1055.     CreateProgmanGroup "Tun KERNEL", "", cmoNone
  1056.     ShowProgmanGroup  "Tun KERNEL", 1, cmoNone
  1057.     CreateProgmanItem "Tun KERNEL", "Admin", MakePath( DESTKER$, "WTUNTCPW.EXE -NFS -NFSD -LPR -LPD -FTPD" ), "", cmoOverwrite
  1058.     CreateProgmanItem "Tun KERNEL", "WTCPIP", MakePath( DESTKER$, "WTCPIP.EXE" ), "", cmoOverwrite
  1059.     CreateProgmanItem "Tun KERNEL", "Ping", MakePath( DESTKER$, "WPING.EXE" ), "", cmoOverwrite
  1060.  
  1061. ENDIF
  1062.  
  1063. IF INSTALLTCP% <> 0 THEN 
  1064.  
  1065.     CreateProgmanGroup "Tun TCP", "", cmoNone
  1066.     ShowProgmanGroup  "Tun TCP", 1, cmoNone
  1067.  
  1068. IF INSTALLKER% <> 0 THEN
  1069.     CreateProgmanItem "Tun TCP", "Admin", MakePath( DESTTCP$, "WTUNTCPW.EXE" ), "", cmoOverwrite
  1070.     CreateProgmanItem "Tun TCP", "WTCPIP", MakePath( DESTKER$, "WTCPIP.EXE" ), "", cmoOverwrite
  1071.     CreateProgmanItem "Tun TCP", "Ping", MakePath( DESTKER$, "WPING.EXE" ), "", cmoOverwrite
  1072. ELSE
  1073. IF KERNELTYPE$ = "BTN4" THEN
  1074.     CreateProgmanItem "Tun TCP", "Admin", MakePath( DESTTCP$, "WTUNTCPW.EXE -TCPIP -NFS" ), "", cmoOverwrite
  1075. ELSE
  1076.     CreateProgmanItem "Tun TCP", "Admin", MakePath( DESTTCP$, "WTUNTCPW.EXE -TCPIP" ), "", cmoOverwrite
  1077. ENDIF
  1078.  
  1079. ENDIF
  1080.  
  1081.     CreateProgmanItem "Tun TCP", "VT320 Emulator", MakePath( DESTTCP$, "WVT320.EXE" ), "", cmoOverwrite
  1082.     CreateProgmanItem "Tun TCP", "File Transfer", MakePath( DESTTCP$, "WFTP.EXE" ), "", cmoOverwrite
  1083.     CreateProgmanItem "Tun TCP", "Remote Command", MakePath( DESTTCP$, "WRSH.EXE" ), "", cmoOverwrite
  1084.     CreateProgmanItem "Tun TCP", "Tape Archive", MakePath( DESTTCP$, "WTAR.EXE" ), "", cmoOverwrite
  1085.     CreateProgmanItem "Tun TCP", "Print Server", MakePath( DESTTCP$, "WLPD.EXE" ), "", cmoOverwrite
  1086.     CreateProgmanItem "Tun TCP", "FTP Server", MakePath( DESTTCP$, "WFTPD.EXE" ), "", cmoOverwrite
  1087.     CreateProgmanItem "Tun TCP", "NFS Server", MakePath( DESTTCP$, "WNFSD.EXE" ), "", cmoOverwrite
  1088.     IF INSTALLMAIL% = 0 THEN
  1089.     CreateProgmanItem "Tun TCP", "Email", MakePath( DESTTCP$, "WMAIL2.EXE" ), "", cmoOverwrite
  1090.     ENDIF
  1091. ENDIF
  1092.  
  1093. IF INSTALLEMUL% <> 0 THEN 
  1094.  
  1095.     CreateProgmanGroup "Tun EMUL", "", cmoNone
  1096.     ShowProgmanGroup  "Tun EMUL", 1, cmoNone
  1097.     CreateProgmanItem "Tun EMUL", "Terminal Emulator", MakePath( DESTEMUL$, "EMULWIN.EXE" ), "", cmoOverwrite
  1098.     CreateProgmanItem "Tun EMUL", "5250 Emulator", MakePath( DESTEMUL$, "5250.EXE" ), "", cmoOverwrite
  1099.     CreateProgmanItem "Tun EMUL", "3270 Emulator", MakePath( DESTEMUL$, "3270.EXE" ), "", cmoOverwrite
  1100.     CreateProgmanItem "Tun EMUL", "Panel Editor", MakePath( DESTEMUL$, "PANEDIT.EXE" ), "", cmoOverwrite
  1101. ENDIF
  1102.  
  1103. IF INSTALLMAIL% <> 0 THEN 
  1104.     CreateProgmanGroup "Tun MAIL", "", cmoNone
  1105.     ShowProgmanGroup  "Tun MAIL", 1, cmoNone
  1106.     CreateProgmanItem "Tun MAIL", "Email", MakePath( DESTMAIL$, "BIN\WMAIL2.EXE" ), "", cmoOverwrite
  1107.     CreateProgmanItem "Tun MAIL", "Remote Mailer", MakePath( DESTMAIL$, "BIN\RMAIL.EXE"), "", cmoOverwrite
  1108. ENDIF
  1109.  
  1110. IF INSTALLSQL% <> 0 THEN
  1111. ''-------------------------------------------------------------------------
  1112. '' CREATEAPPGROUP
  1113. ''   TUN SQL Program group and program items creation     
  1114. ''-------------------------------------------------------------------------
  1115. CREATEAPPGROUP:
  1116.     CreateProgmanGroup "Tun SQL", "", cmoNone
  1117.     ShowProgmanGroup  "Tun SQL", 1, cmoNone
  1118.     CreateProgmanItem "Tun SQL", "DB Show", MakePath( DESTSQL$, "BIN\DBSHOW.EXE" ), "", cmoOverwrite
  1119.     CreateProgmanItem "Tun SQL", "DB Script", MakePath( DESTSQL$, "BIN\DBSCRIPT.EXE" ), "", cmoOverwrite
  1120.     CreateProgmanItem "Tun SQL", "DB Map", MakePath( DESTSQL$, "BIN\DBMAP.EXE" ), "", cmoOverwrite
  1121.  
  1122. ''-------------------------------------------------------------------------
  1123. '' CREATESAMPLESGROUP
  1124. ''   TUN SQL Sample program items creation     
  1125. ''-------------------------------------------------------------------------
  1126. CREATESAMPLESGROUP:
  1127.     IF opt2$ = "SAMPLES" THEN
  1128.     '' ---- Word demo's ----
  1129.     szIco$ = MakePath( DESTSQL$, "DEMO\WORD\ODBCWRD.ICO" )
  1130.     szWorkDir$ = MakePath( DESTSQL$, "DEMO\WORD" )
  1131.     szPar$ = szIco$ + ",,,," + szWorkDir$
  1132.     szExePath$ = LookupApp("WORD")
  1133.     IF szDemoIfx$ = "YES" THEN
  1134.         szCmd$ = szExePath$ + " IFXDEMO1.DOC"
  1135.         CreateProgmanItem "TUN SQL", "MS Word Informix TABLE", szCmd$ , szPar$, cmoOverwrite
  1136.         szCmd$ = szExePath$ + " IFXDEMO2.DOC"
  1137.         CreateProgmanItem "TUN SQL", "MS Word Informix MAILING", szCmd$ , szPar$, cmoOverwrite
  1138.         END IF
  1139.     IF szDemoOra$ = "YES" THEN
  1140.         szCmd$ = szExePath$ + " ORADEMO1.DOC"
  1141.         CreateProgmanItem "TUN SQL", "MS Word Oracle TABLE", szCmd$ , szPar$, cmoOverwrite
  1142.         szCmd$ = szExePath$ + " ORADEMO2.DOC"
  1143.         CreateProgmanItem "TUN SQL", "MS Word Oracle MAILING", szCmd$ , szPar$, cmoOverwrite
  1144.         END IF
  1145.     IF szDemoSyb$ = "YES" THEN
  1146.         szCmd$ = szExePath$ + " SYBDEMO1.DOC"
  1147.         CreateProgmanItem "TUN SQL", "MS Word Sybase TABLE", szCmd$ , szPar$, cmoOverwrite
  1148.         szCmd$ = szExePath$ + " SYBDEMO2.DOC"
  1149.         CreateProgmanItem "TUN SQL", "MS Word Sybase MAILING", szCmd$ , szPar$, cmoOverwrite
  1150.         END IF
  1151.     IF szDemoIse$ = "YES" THEN
  1152.         szCmd$ = szExePath$ + " ISEDEMO1.DOC"
  1153.         CreateProgmanItem "TUN SQL", "MS Word Informix-SE TABLE", szCmd$ , szPar$, cmoOverwrite
  1154.         szCmd$ = szExePath$ + " ISEDEMO2.DOC"
  1155.         CreateProgmanItem "TUN SQL", "MS Word Informix-SE MAILING", szCmd$ , szPar$, cmoOverwrite
  1156.         END IF
  1157.  
  1158.     '' ---- Excel demo's ----
  1159.     szIco$ = MakePath( DESTSQL$, "DEMO\EXCEL\ODBCEXC.ICO" )
  1160.     szWorkDir$ = MakePath( DESTSQL$, "DEMO\EXCEL" )
  1161.     szPar$ = szIco$ + ",,,," + szWorkDir$
  1162.     szExePath$ = LookupApp("EXCEL")
  1163.     IF szDemoIfx$ = "YES" THEN
  1164.         szCmd$ = szExePath$ + " IFXDEMO1.XLS"
  1165.         CreateProgmanItem "TUN SQL", "MS Excel Informix TABLE", szCmd$ , szPar$, cmoOverwrite
  1166.         szCmd$ = szExePath$ + " IFXDEMO2.XLS"
  1167.         CreateProgmanItem "TUN SQL", "MS Excel Informix X-TABLE", szCmd$ , szPar$, cmoOverwrite
  1168.         szCmd$ = szExePath$ + " IFXDEMO3.XLS"
  1169.         CreateProgmanItem "TUN SQL", "MS Excel Informix REQUEST", szCmd$ , szPar$, cmoOverwrite
  1170.     END IF
  1171.     IF szDemoOra$ = "YES" THEN
  1172.         szCmd$ = szExePath$ + " ORADEMO1.XLS"
  1173.         CreateProgmanItem "TUN SQL", "MS Excel Oracle TABLE", szCmd$ , szPar$, cmoOverwrite
  1174.         szCmd$ = szExePath$ + " ORADEMO2.XLS"
  1175.         CreateProgmanItem "TUN SQL", "MS Excel Oracle X-TABLE", szCmd$ , szPar$, cmoOverwrite
  1176.         szCmd$ = szExePath$ + " ORADEMO3.XLS"
  1177.         CreateProgmanItem "TUN SQL", "MS Excel Oracle REQUEST", szCmd$ , szPar$, cmoOverwrite
  1178.     END IF
  1179.     IF szDemoSyb$ = "YES" THEN
  1180.         szCmd$ = szExePath$ + " SYBDEMO1.XLS"
  1181.         CreateProgmanItem "TUN SQL", "MS Excel Sybase TABLE", szCmd$ , szPar$, cmoOverwrite
  1182.         szCmd$ = szExePath$ + " SYBDEMO2.XLS"
  1183.         CreateProgmanItem "TUN SQL", "MS Excel Sybase X-TABLE", szCmd$ , szPar$, cmoOverwrite
  1184.         szCmd$ = szExePath$ + " SYBDEMO3.XLS"
  1185.         CreateProgmanItem "TUN SQL", "MS Excel Sybase REQUEST", szCmd$ , szPar$, cmoOverwrite
  1186.     END IF
  1187.     IF szDemoIse$ = "YES" THEN
  1188.         szCmd$ = szExePath$ + " ISEDEMO1.XLS"
  1189.         CreateProgmanItem "TUN SQL", "MS Excel Informix-SE TABLE", szCmd$ , szPar$, cmoOverwrite
  1190.         szCmd$ = szExePath$ + " ISEDEMO2.XLS"
  1191.         CreateProgmanItem "TUN SQL", "MS Excel Informix-SE X-TABLE", szCmd$ , szPar$, cmoOverwrite
  1192.         szCmd$ = szExePath$ + " ISEDEMO3.XLS"
  1193.         CreateProgmanItem "TUN SQL", "MS Excel Informix-SE REQUEST", szCmd$ , szPar$, cmoOverwrite
  1194.     END IF
  1195.  
  1196.     '' ---- Access demo's ----
  1197.     szIco$ = MakePath( DESTSQL$, "DEMO\ACCESS\ODBCACC.ICO" )
  1198.     szWorkDir$ = MakePath( DESTSQL$, "DEMO\ACCESS" )
  1199.     szPar$ = szIco$ + ",,,," + szWorkDir$
  1200.     szExePath$ = LookupApp("ACCESS")
  1201.     IF szDemoIfx$ = "YES" THEN
  1202.         szCmd$ = szExePath$ + " IFXDEMO.MDB"
  1203.         CreateProgmanItem "TUN SQL", "MS Access Informix TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  1204.     END IF
  1205.     IF szDemoOra$ = "YES" THEN
  1206.         szCmd$ = szExePath$ + " ORADEMO.MDB"
  1207.         CreateProgmanItem "TUN SQL", "MS Access Oracle TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  1208.     END IF
  1209.     IF szDemoSyb$ = "YES" THEN
  1210.         szCmd$ = szExePath$ + " SYBDEMO.MDB"
  1211.         CreateProgmanItem "TUN SQL", "MS Access Sybase TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  1212.     END IF
  1213.     IF szDemoIse$ = "YES" THEN
  1214.         szCmd$ = szExePath$ + " ISEDEMO.MDB"
  1215.         CreateProgmanItem "TUN SQL", "MS Access Informix-SE TABLE LINK", szCmd$ , szPar$, cmoOverwrite
  1216.     END IF
  1217.     END IF
  1218. ENDIF
  1219.  
  1220. ENDIF
  1221.  
  1222. ''      Run TCP/IP Custom Dialogs
  1223. IF RUNTCPCONF$ <> "NO" THEN
  1224.  
  1225. IF INSTALLKER% <> 0 THEN
  1226.   IF TCPCONF$= "YES" THEN
  1227.     SETUPPROG$= MakePath( DESTKER$, "WTCPDLG.DLL")
  1228.     i% = CustomSetup( WndFrame%, SETUPPROG$)
  1229.   ENDIF
  1230. ENDIF
  1231. ENDIF
  1232.  
  1233.  
  1234. '' QUIT
  1235. ''   Exit the program after displaying the appropriate dialog box according
  1236. ''   the error status
  1237. QUIT:
  1238.     ON ERROR GOTO ERRQUIT
  1239.  
  1240.     IF ERR = 0 THEN
  1241.         dlg% = EXITSUCCESS
  1242.     IF COPYFILES$ <> "NO" THEN
  1243.       IF RestartListEmpty() = 0 THEN
  1244.         dumb% = ExitExecRestart()
  1245.       END IF
  1246.     ENDIF
  1247.         IF FINDTUNPATH% = 0 OR (INSTALLTCP% <> 0 AND (KERNELTYPE$ = "BTN2" OR KERNELTYPE$ = "BTN3")) THEN
  1248.           IF FINDTUNPATH% = 0 THEN
  1249. REBOOT1:
  1250.             SetSymbolValue "TitleYesNo", "Restart System"
  1251.             SetSymbolValue "MessageYesNo", "Setup has modified AUTOEXEC.BAT file. Do you want to restart the computer ?" 
  1252.             sz$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "")
  1253.             UIPop 1
  1254.             IF sz$ <> "NO" THEN
  1255.            i%=MyExitWindows(1)
  1256.                GOTO REBOOT1
  1257.             ENDIF
  1258.           ELSE
  1259. REBOOT2:
  1260.             SetSymbolValue "TitleYesNo", "Restart Windows"
  1261.             SetSymbolValue "MessageYesNo", "Setup has modified Windows system files. Do you want to restart Windows ?" 
  1262.             sz$ = UIStartDlg(CUIDLL$, ASKYESNO, "FAskYesNoDlgProc", 0, "")
  1263.             UIPop 1
  1264.             IF sz$ <> "NO" THEN
  1265.            i%=MyExitWindows(0)
  1266.                GOTO REBOOT2
  1267.             ENDIF
  1268.           ENDIF
  1269.  
  1270.         ENDIF
  1271.     ELSEIF ERR = STFQUIT THEN
  1272.         dlg% = EXITQUIT
  1273.     ELSE
  1274.         dlg% = EXITFAILURE
  1275.     END IF
  1276. QUITL1:
  1277.     sz$ = UIStartDlg(CUIDLL$, dlg%, "FInfo0DlgProc", 0, "")
  1278.     IF sz$ = "REACTIVATE" THEN
  1279.         GOTO QUITL1
  1280.     END IF
  1281.     UIPop 1
  1282.  
  1283.     END
  1284.  
  1285. ERRQUIT:
  1286.     i% = DoMsgBox("Setup script sources are not correct, please contact your technical support", "Setup Warning", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  1287.     END
  1288.  
  1289. '' GETPATH
  1290. ''   Ask for TUN SQL Installation directory
  1291. GETPATH:
  1292.     SetSymbolValue "EditTextIn", DEST$
  1293.     SetSymbolValue "EditFocus", "END"
  1294. GETPATHL1:
  1295.     sz$ = UIStartDlg(CUIDLL$, DESTPATH, "FEditDlgProc", APPHELP, HELPPROC$)
  1296.  
  1297.     IF sz$ = "CONTINUE" THEN
  1298.         olddest$ = DEST$
  1299.         DEST$ = GetSymbolValue("EditTextOut")
  1300.  
  1301.         ''Validate new path.
  1302.         IF IsDirWritable(DEST$) = 0 THEN
  1303.             GOSUB BADPATH
  1304.             GOTO GETPATHL1
  1305.         END IF
  1306.         UIPop 1
  1307.  
  1308.         ''Truncate display if too long.
  1309.         IF LEN(DEST$) > 23 THEN
  1310.             ReplaceListItem DRIVETEXT$, 7, MID$(DEST$, 1, 23)+"..."
  1311.         ELSE
  1312.             ReplaceListItem DRIVETEXT$, 7, DEST$
  1313.         END IF
  1314.  
  1315.         ''Recalc if path changed.
  1316.         IF (olddest$ <> DEST$) AND (olddest$ <> DEST$+"\") AND (olddest$+"\" <> DEST$) THEN
  1317.             RecalcPath
  1318.             SetDriveStatus
  1319.         END IF
  1320.  
  1321.         olddest$ = ""
  1322.         GOTO CUSTINST
  1323.     ELSEIF sz$ = "REACTIVATE" THEN
  1324.         RecalcPath
  1325.         SetDriveStatus
  1326.         GOTO GETPATHL1
  1327.     ELSEIF sz$ = "EXIT" THEN
  1328.         GOSUB ASKQUIT
  1329.         GOTO GETPATHL1
  1330.     ELSE
  1331.         UIPop 1
  1332.         GOTO CUSTINST
  1333.     END IF
  1334. '' ASKUPDATE
  1335. ''   Ask for upgrading the CTL3D.DLL library
  1336. ASKUPDATE:
  1337.     sz$ = UIStartDlg(CUIDLL$, ASKUPDATE, "FAskUpdateDlgProc", 0, "")
  1338.     IF sz$ = "YES" THEN
  1339.     CopyFile szOF$, GetWindowsSysDir() + "CTL3D.OLD", cmoOverwrite, 0
  1340.     CopyFile szNF$, szOF$, cmoOverwrite, 0 
  1341.     ENDIF
  1342.         
  1343.     UIPop 1
  1344.     RETURN
  1345.  
  1346. '' CHECKDMVERSION
  1347. ''   If present, check that the driver manager version is greater than
  1348. ''   1.00. If not, display a dialog box to inform the user.
  1349. CHECKDMVERSION:
  1350.     szWinDir$ = GetWindowsDir()
  1351.     szWinSysDir$ = GetWindowsSysDir()
  1352.     fSaveDM% = 0
  1353.     fDM% = CheckDriverManager(szWinDir$, szWinSysDir$)
  1354.     IF fDM% = 0 THEN
  1355.     '' ---- No driver manager is currently installed ----
  1356.     IF opt1$ = "NONE" THEN
  1357.             sz$ = UIStartDlg(CUIDLL$,ODBCNODM,"FInfoDlgProc",APPHELP,HELPPROC$)
  1358.         IF sz$ = "BACK" THEN
  1359. ''            UIPop 1
  1360.             GOTO CUSTINST
  1361.         ELSEIF sz$ = "CONTINUE" THEN
  1362.             UIPop 1
  1363.             GOTO SERIAL
  1364.         ELSEIF sz$ = "EXIT" THEN
  1365.                 GOSUB ASKQUIT
  1366.                 GOTO CHECKDMVERSION
  1367.         ELSEIF sz$ = "REACTIVATE" THEN
  1368.                 GOTO CHECKDMVERSION
  1369.         ENDIF
  1370.     ELSE
  1371.         '' ---- Hide the Custom install dialog ----
  1372.         '' UIPop 1
  1373.         GOTO SERIAL
  1374.     ENDIF
  1375.     ELSEIF fDM% = -1 THEN
  1376.     '' ---- Driver manager version is less than 2.00 ----
  1377.     IF opt1$ = "NONE" THEN
  1378.         '' ---- User has not selected DM Installation ----
  1379.         '' ---- So we display a Version Warning Dialog ----
  1380.             sz$ = UIStartDlg(CUIDLL$,ODBCBAD,"FInfoDlgProc",APPHELP,HELPPROC$) 
  1381.         IF sz$ = "BACK" THEN
  1382.             '' UIPop 1
  1383.             GOTO CUSTINST
  1384.         ELSEIF sz$ = "CONTINUE" THEN
  1385.             UIPop 1
  1386.             GOTO SERIAL
  1387.         ELSEIF sz$ = "EXIT" THEN
  1388.                 GOSUB ASKQUIT
  1389.                 GOTO CHECKDMVERSION
  1390.         ELSEIF sz$ = "REACTIVATE" THEN
  1391.                 GOTO CHECKDMVERSION
  1392.         ENDIF
  1393.     ELSE
  1394.         '' ---- User has selected DM Installation ----
  1395.         '' ---- So we display a Backup Copy Dialog ----
  1396.             sz$ = UIStartDlg(CUIDLL$,ODBCBACK,"FInfoDlgProc",APPHELP,HELPPROC$) 
  1397.         IF sz$ = "BACK" THEN
  1398.             ''UIPop 1
  1399.             GOTO CUSTINST
  1400.         ELSEIF sz$ = "CONTINUE" THEN
  1401.             UIPop 1
  1402.         fSaveDM% = 1
  1403.             GOTO SERIAL
  1404.         ELSEIF sz$ = "EXIT" THEN
  1405.                 GOSUB ASKQUIT
  1406.                 GOTO CHECKDMVERSION
  1407.         ELSEIF sz$ = "REACTIVATE" THEN
  1408.                 GOTO CHECKDMVERSION
  1409.         ENDIF
  1410.     ENDIF
  1411.     ELSEIF fDM% = 1 THEN
  1412.     '' ---- Driver manager version is 2.00 ----
  1413.     IF opt1$ = "DRIVERMANAGER" THEN
  1414.         '' ---- User has selected DM Installation  ----
  1415.         '' ---- So we display a Backup Copy Dialog ----
  1416.             sz$ = UIStartDlg(CUIDLL$,ODBCBACK,"FInfoDlgProc",APPHELP,HELPPROC$) 
  1417.         IF sz$ = "BACK" THEN
  1418.             '' UIPop 1
  1419.             GOTO CUSTINST
  1420.         ELSEIF sz$ = "CONTINUE" THEN
  1421.             UIPop 1
  1422.         fSaveDM% = 1
  1423.             GOTO SERIAL
  1424.         ELSEIF sz$ = "EXIT" THEN
  1425.                 GOSUB ASKQUIT
  1426.                 GOTO CHECKDMVERSION
  1427.         ENDIF
  1428.     ELSE
  1429.         '' ---- User has not selected DM Installation -> OK           ----
  1430.         '' ---- We hide the Custom install dialog and proceed install ----
  1431.         ''UIPop 1
  1432.         GOTO SERIAL
  1433.     ENDIF
  1434.     ELSE
  1435.     GOTO CUSTINST
  1436.     ENDIF
  1437.  
  1438.      
  1439.  
  1440. '' TOOBIG
  1441. ''   Inform the user he does not have enough disk space
  1442. TOOBIG:
  1443.     sz$ = UIStartDlg(CUIDLL$, TOOBIG, "FInfo0DlgProc", 0, "")
  1444.     IF sz$ = "REACTIVATE" THEN
  1445.         RecalcPath
  1446.         SetDriveStatus
  1447.         GOTO TOOBIG
  1448.     END IF
  1449.     UIPop 1
  1450.     RETURN
  1451.  
  1452. '' BADPATH
  1453. ''   Inform the user that the path he entered is not valid
  1454. BADPATH:
  1455.     sz$ = UIStartDlg(CUIDLL$, BADPATH, "FInfo0DlgProc", 0, "")
  1456.     IF sz$ = "REACTIVATE" THEN
  1457.         RecalcPath
  1458.         SetDriveStatus
  1459.         GOTO BADPATH
  1460.     END IF
  1461.     UIPop 1
  1462.     RETURN
  1463.  
  1464. '' ASKQUIT
  1465. ''   Ask the user if he really want to quit TUN SQL setup or continue
  1466. ''   the installation
  1467. ASKQUIT:
  1468.     sz$ = UIStartDlg(CUIDLL$, ASKQUIT, "FQuitDlgProc", 0, "")
  1469.  
  1470.     IF sz$ = "EXIT" THEN
  1471.         UIPopAll
  1472.         ERROR STFQUIT
  1473.     ELSEIF sz$ = "REACTIVATE" THEN
  1474.         GOTO ASKQUIT
  1475.     ELSE
  1476.         UIPop 1
  1477.     END IF
  1478.     RETURN
  1479.  
  1480.  
  1481. '** Purpose:
  1482. '**     Adds the specified option files to the copy list.
  1483. '** Arguments:
  1484. '**     ftype%  - type of files to add, one of the following:
  1485. '**             APPFILES, OPTFILES1, OPTFILES2
  1486. '** Returns:
  1487. '**     none.
  1488. SUB AddOptFilesToCopyList (ftype%) STATIC
  1489.  
  1490.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  1491.     IF ftype% = APPFILES THEN
  1492.         IF KERNELTYPE$ = "BTN2" THEN
  1493.            IF INSTALLKER% <> 0 THEN
  1494.           AddSectionFilesToCopyList "KernelFiles", SrcDir$, DEST$
  1495.            ENDIF
  1496.            IF GetListItem(CHECKSTATES$, OPTFILES4) = "ON" THEN
  1497.          AddSectionFilesToCopyList "NfsDllFiles", SrcDir$, DEST$
  1498.            ENDIF
  1499.         ELSEIF KERNELTYPE$ = "BTN3" THEN
  1500.            IF GetListItem(CHECKSTATES$, OPTFILES4) = "ON" THEN
  1501.          AddSectionFilesToCopyList "NfsVxdFiles", SrcDir$, DEST$
  1502.            ENDIF
  1503.         ENDIF
  1504.     ELSEIF ftype% = OPTFILES12  THEN
  1505.     AddSectionFilesToCopyList "KernelnFiles", SrcDir$, DEST$
  1506.     ELSEIF ftype% = OPTFILES4 AND GetListItem(CHECKSTATES$, OPTFILES4) = "ON" THEN
  1507.     AddSectionFilesToCopyList "TcpFiles", SrcDir$, DEST$
  1508.     ELSEIF ftype% = OPTFILES5 AND GetListItem(CHECKSTATES$, OPTFILES5) = "ON" THEN
  1509.     AddSectionFilesToCopyList "EmulFiles", SrcDir$, DEST$
  1510.     ELSEIF ftype% = OPTFILES6 AND GetListItem(CHECKSTATES$, OPTFILES6) = "ON" THEN
  1511.     AddSectionFilesToCopyList "MailFiles", SrcDir$, DEST$
  1512.     ELSEIF ftype% = OPTFILES7 AND GetListItem(CHECKSTATES$, OPTFILES7) = "ON" THEN
  1513.     AddSectionFilesToCopyList "Pop3MFiles", SrcDir$, DEST$
  1514.     ELSEIF ftype% = OPTFILES8 AND GetListItem(CHECKSTATES$, OPTFILES8) = "ON" THEN
  1515.     AddSectionFilesToCopyList "FaxFiles", SrcDir$, DEST$
  1516.     ELSEIF ftype% = OPTFILES9 AND GetListItem(CHECKSTATES$, OPTFILES9) = "ON" THEN
  1517.     AddSectionFilesToCopyList "SqlFiles", SrcDir$, DEST$
  1518.     ELSEIF ftype% = OPTFILES10 AND GetListItem(CHECKSTATES$, OPTFILES10) = "ON" THEN
  1519.     AddSectionFilesToCopyList "OdbcFiles", SrcDir$, DEST$
  1520.     ELSEIF ftype% = OPTFILES11 AND GetListItem(CHECKSTATES$, OPTFILES11) = "ON" THEN
  1521.     AddSectionFilesToCopyList "SamplesFiles", SrcDir$, DEST$
  1522.     ELSEIF ftype% = CRYPTFILES  THEN
  1523.     AddSectionFilesToCopyList "CryptFiles", SrcDir$, DEST$
  1524.     ELSEIF ftype% = CTL3DFILES  THEN
  1525.     AddSectionFilesToCopyList "Ctl3dFiles", SrcDir$, DEST$
  1526.     ELSEIF ftype% = CONVERTFILES  THEN
  1527.     AddSectionFilesToCopyList "ConvertFiles", SrcDir$, DEST$
  1528.     ENDIF
  1529.     SrcDir$ = ""
  1530.  
  1531. END SUB
  1532.  
  1533.  
  1534. '** Purpose:
  1535. '**     Recalculates disk space for the given option files and sets
  1536. '**     the status info symbol "StatusItemsText".
  1537. '** Arguments:
  1538. '**     ftype% - type of files to add, one of the following:
  1539. '**             APPFILES, OPTFILES1, OPTFILES2
  1540. '** Returns:
  1541. '**     none.
  1542. SUB RecalcOptFiles (ftype%) STATIC
  1543.     CursorSave% = ShowWaitCursor()
  1544.  
  1545.     ClearCopyList
  1546.     AddOptFilesToCopyList ftype%
  1547.  
  1548.     fExtra% = 0
  1549.     IF ftype% = APPFILES THEN
  1550.         ListSym$ = APPNEEDS$
  1551.         ''Add extra cost to Windows drive for ini/progman, etc.
  1552.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1553.         ReplaceListItem EXTRACOSTS$, ndrive%, "10240"
  1554.         fExtra% = 1
  1555.     ELSEIF ftype% = OPTFILES1 THEN
  1556.         ListSym$ = OPT1NEEDS$
  1557.     ELSEIF ftype% = OPTFILES2 THEN
  1558.         ListSym$ = OPT2NEEDS$
  1559.     ELSEIF ftype% = OPTFILES3 THEN
  1560.         ListSym$ = OPT3NEEDS$
  1561.     ELSEIF ftype% = OPTFILES4 THEN
  1562.         ListSym$ = OPT4NEEDS$
  1563.     ELSEIF ftype% = OPTFILES5 THEN
  1564.         ListSym$ = OPT5NEEDS$
  1565.     ELSEIF ftype% = OPTFILES6 THEN
  1566.         ListSym$ = OPT6NEEDS$
  1567.     ELSEIF ftype% = OPTFILES7 THEN
  1568.         ListSym$ = OPT7NEEDS$
  1569.     ELSEIF ftype% = OPTFILES8 THEN
  1570.         ListSym$ = OPT8NEEDS$
  1571.     ELSEIF ftype% = OPTFILES9 THEN
  1572.         ListSym$ = OPT9NEEDS$
  1573.     ELSEIF ftype% = OPTFILES10 THEN
  1574.         ListSym$ = OPT10NEEDS$
  1575.     ELSEIF ftype% = OPTFILES11 THEN
  1576.         ListSym$ = OPT11NEEDS$
  1577.     ELSEIF ftype% = OPTFILES12 THEN
  1578.         ListSym$ = OPT12NEEDS$
  1579.     ELSEIF ftype% = OPTFILES13 THEN
  1580.         ListSym$ = OPT13NEEDS$
  1581.     END IF
  1582.  
  1583.     StillNeed& = GetCopyListCost(EXTRACOSTS$, ListSym$, "")
  1584.  
  1585.     cost& = 0
  1586.     FOR i% = 1 TO 26 STEP 1
  1587.         cost&  = cost& + VAL(GetListItem(ListSym$, i%))
  1588.     NEXT i%
  1589.     ReplaceListItem STATUSTEXT$, ftype%, STR$(cost& / 1024) + " K"
  1590.  
  1591.     IF StillNeed& > 0 THEN
  1592.         ReplaceListItem BIGLIST$, ftype%, "YES"
  1593.     ELSE
  1594.         ReplaceListItem BIGLIST$, ftype%, ""
  1595.     END IF
  1596.  
  1597.     IF fExtra% THEN
  1598.         ReplaceListItem EXTRACOSTS$, ndrive%, "0"
  1599.     END IF
  1600.     RestoreCursor CursorSave%
  1601.     ListSym$ = ""
  1602. END SUB
  1603.  
  1604.  
  1605. '*************************************************************************
  1606. '**
  1607. '** Purpose:
  1608. '**     Recalculates disk space and sets option status info according
  1609. '**     to the current destination path.
  1610. '** Arguments:
  1611. '**     none.
  1612. '** Returns:
  1613. '**     none.
  1614. '*************************************************************************
  1615. SUB RecalcPath STATIC
  1616.  
  1617.     CursorSave% = ShowWaitCursor()
  1618.  
  1619.     DESTKER$= MakePath( DEST$, "KERNELW")
  1620.     FILEPATH$= MakePath( DESTKER$, "TUNTCPIP.DLL")
  1621.     IF DoesFileExist ( FILEPATH$, femExits) = 1 THEN
  1622.       MasterFileVersion$ = GetSectionKeyVersion("KernelFiles","TUNTCPIP.DLL")
  1623.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  1624.       INSTALLEDKER% = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  1625.     ENDIF
  1626.     RecalcOptFiles APPFILES
  1627.     IF INSTALLEDKER% <> 1 THEN
  1628.       RecalcOptFiles OPTFILES12
  1629.     ENDIF
  1630.     RecalcOptFiles OPTFILES4
  1631.     RecalcOptFiles OPTFILES5
  1632.     RecalcOptFiles OPTFILES6
  1633.     RecalcOptFiles OPTFILES7
  1634.     RecalcOptFiles OPTFILES8
  1635.     RecalcOptFiles OPTFILES9
  1636.     RecalcOptFiles OPTFILES10
  1637.     RecalcOptFiles OPTFILES11
  1638.  
  1639.     RestoreCursor CursorSave%
  1640. END SUB
  1641.  
  1642.  
  1643. '*************************************************************************
  1644. '**
  1645. '** Purpose:
  1646. '**     Sets drive status info according to latest disk space calcs.
  1647. '** Arguments:
  1648. '**     none.
  1649. '** Returns:
  1650. '**     none.
  1651. '*************************************************************************
  1652. SUB SetDriveStatus STATIC
  1653.  
  1654.     drive$ = MID$(DEST$, 1, 1)
  1655.     ndrive% = ASC(ucase$(drive$)) - ASC("A") + 1
  1656.     cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%)) + VAL(GetListItem(OPT4NEEDS$, ndrive%)) 
  1657.     cost& = cost& + VAL(GetListItem(OPT5NEEDS$, ndrive%)) + VAL(GetListItem(OPT6NEEDS$, ndrive%)) + VAL(GetListItem(OPT7NEEDS$, ndrive%)) + VAL(GetListItem(OPT8NEEDS$, ndrive%)) + VAL(GetListItem(OPT9NEEDS$, ndrive%))
  1658.     cost& = cost& + VAL(GetListItem(OPT10NEEDS$, ndrive%)) + VAL(GetListItem(OPT11NEEDS$, ndrive%)) + VAL(GetListItem(OPT12NEEDS$, ndrive%))
  1659.     free& = GetFreeSpaceForDrive(drive$)
  1660.     ReplaceListItem DRIVETEXT$, 1, drive$ + ":"
  1661.     ReplaceListItem DRIVETEXT$, 2, STR$(cost& / 1024) + " K"
  1662.     ReplaceListItem DRIVETEXT$, 3, STR$(free& / 1024) + " K"
  1663.  
  1664.     IF drive$ = WINDRIVE$ THEN
  1665.         ReplaceListItem DRIVETEXT$, 4, ""
  1666.         ReplaceListItem DRIVETEXT$, 5, ""
  1667.         ReplaceListItem DRIVETEXT$, 6, ""
  1668.     ELSE
  1669.         ndrive% = ASC(ucase$(WINDRIVE$)) - ASC("A") + 1
  1670.         cost& = VAL(GetListItem(APPNEEDS$, ndrive%)) + VAL(GetListItem(OPT1NEEDS$, ndrive%)) + VAL(GetListItem(OPT2NEEDS$, ndrive%)) + VAL(GetListItem(OPT3NEEDS$, ndrive%)) + VAL(GetListItem(OPT4NEEDS$, ndrive%)) 
  1671.         cost& = cost& + VAL(GetListItem(OPT5NEEDS$, ndrive%)) + VAL(GetListItem(OPT6NEEDS$, ndrive%)) + VAL(GetListItem(OPT7NEEDS$, ndrive%)) + VAL(GetListItem(OPT8NEEDS$, ndrive%)) + VAL(GetListItem(OPT9NEEDS$, ndrive%))
  1672.         cost& = cost& + VAL(GetListItem(OPT10NEEDS$, ndrive%)) + VAL(GetListItem(OPT11NEEDS$, ndrive%)) + VAL(GetListItem(OPT12NEEDS$, ndrive%))
  1673.         IF cost& = 0 THEN
  1674.             ReplaceListItem DRIVETEXT$, 4, ""
  1675.             ReplaceListItem DRIVETEXT$, 5, ""
  1676.             ReplaceListItem DRIVETEXT$, 6, ""
  1677.         ELSE
  1678.             free& = GetFreeSpaceForDrive(WINDRIVE$)
  1679.             ReplaceListItem DRIVETEXT$, 4, WINDRIVE$ + ":"
  1680.             ReplaceListItem DRIVETEXT$, 5, STR$(cost& / 1024) + " K"
  1681.             ReplaceListItem DRIVETEXT$, 6, STR$(free& / 1024) + " K"
  1682.         END IF
  1683.     END IF
  1684. END SUB
  1685.  
  1686.  
  1687. '*************************************************************************
  1688. '**
  1689. '** Purpose:
  1690. '**     Appends a file name to the end of a directory path,
  1691. '**     inserting a backslash character as needed.
  1692. '** Arguments:
  1693. '**     szDir$  - full directory path (with optional ending "\")
  1694. '**     szFile$ - filename to append to directory
  1695. '** Returns:
  1696. '**     Resulting fully qualified path name.
  1697. '*************************************************************************
  1698. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  1699.     IF szDir$ = "" THEN
  1700.         MakePath = szFile$
  1701.     ELSEIF szFile$ = "" THEN
  1702.         MakePath = szDir$
  1703.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  1704.         MakePath = szDir$ + szFile$
  1705.     ELSE
  1706.         MakePath = szDir$ + "\" + szFile$
  1707.     END IF
  1708. END FUNCTION
  1709.  
  1710.  
  1711. '*************************************************************************
  1712. '**
  1713. '** Purpose:
  1714. '**     Return the string form of an integer.
  1715. '** Arguments:
  1716. '**     i%  - The integer to transform.
  1717. '** Returns:
  1718. '**     The string form of the integer.
  1719. '*************************************************************************
  1720. FUNCTION MakeString (i%) STATIC AS STRING
  1721.  
  1722.     Number$ = "0123456789"
  1723.     MakeString = "0" + MID$(Number$,i%+1 ,1)
  1724.     
  1725. END FUNCTION
  1726.  
  1727. '*************************************************************************
  1728. '**
  1729. '** Purpose:
  1730. '**     Return the string form of a drive number (1 is drive A, ...)
  1731. '** Arguments:
  1732. '**     i%  - The drive number starting at 1
  1733. '** Returns:
  1734. '**     The string form of the drive.
  1735. '*************************************************************************
  1736.  
  1737. FUNCTION MakeDrive (i%) STATIC AS STRING
  1738.  
  1739.     Letters$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
  1740.     MakeDrive = MID$(Letters$,i%,1)
  1741.     
  1742. END FUNCTION
  1743.  
  1744.  
  1745. '*************************************************************************
  1746. '**
  1747. '** Purpose:
  1748. '**     Giving an application name try to locate the complete path of the
  1749. '**    application executable
  1750. '** Arguments:
  1751. '**     szAppName$ - The application name to locate. One of the following:
  1752. '**            "WORD"
  1753. '**            "EXCEL"
  1754. '**            "ACCESS"
  1755. '** Returns:
  1756. '**     The complete path of the application executable
  1757. '*************************************************************************
  1758.  
  1759. FUNCTION LookupApp (szAppName$) STATIC AS STRING
  1760.  
  1761.     LookupApp = "APPLI.EXE"
  1762.     FOR i% = 3 TO 26 STEP 1
  1763.     szDrive$ = MakeDrive(i%)
  1764.     IF IsDriveValid(szDrive$) = 1 THEN
  1765.         IF IsDriveRemovable(szDrive$) = 0 THEN
  1766.         IF szAppName$ = "WORD" THEN
  1767.             szExeName$ = "WINWORD.EXE"
  1768.             szPath$ = szDrive$ + ":\MSOFFICE\WINWORD\" + szExeName$
  1769.             IF DoesFileExist(szPath$, femRead) THEN
  1770.                 LookupApp = szPath$
  1771.                 GOTO RETURN_LOOKUPAPP
  1772.             ELSE
  1773.                 szPath$ = szDrive$ + ":\WINWORD\" + szExeName$
  1774.                 IF DoesFileExist(szPath$, femRead) THEN
  1775.                     LookupApp = szPath$
  1776.                     GOTO RETURN_LOOKUPAPP
  1777.                 ELSE
  1778.                 LookupApp = szExeName$
  1779.                 ENDIF
  1780.             ENDIF
  1781.         ELSEIF szAppName$ = "EXCEL" THEN
  1782.             szExeName$ = "EXCEL.EXE"
  1783.             szPath$ = szDrive$ + ":\MSOFFICE\EXCEL\" + szExeName$
  1784.             IF DoesFileExist(szPath$, femRead) THEN
  1785.                 LookupApp = szPath$
  1786.                 GOTO RETURN_LOOKUPAPP
  1787.             ELSE
  1788.                 szPath$ = szDrive$ + ":\EXCEL\" + szExeName$
  1789.                 IF DoesFileExist(szPath$, femRead) THEN
  1790.                     LookupApp = szPath$
  1791.                     GOTO RETURN_LOOKUPAPP
  1792.                 ELSE
  1793.                 LookupApp = szExeName$
  1794.                 ENDIF
  1795.             ENDIF
  1796.         ELSEIF szAppName$ = "ACCESS" THEN
  1797.             szExeName$ = "MSACCESS.EXE"
  1798.             szPath$ = szDrive$ + ":\MSOFFICE\ACCESS\" + szExeName$
  1799.             IF DoesFileExist(szPath$, femRead) THEN
  1800.                 LookupApp = szPath$
  1801.                 GOTO RETURN_LOOKUPAPP
  1802.             ELSE
  1803.                 szPath$ = szDrive$ + ":\ACCESS\" + szExeName$
  1804.                 IF DoesFileExist(szPath$, femRead) THEN
  1805.                     LookupApp = szPath$
  1806.                     GOTO RETURN_LOOKUPAPP
  1807.                 ELSE
  1808.                 LookupApp = szExeName$
  1809.                 ENDIF
  1810.             ENDIF
  1811.         ENDIF
  1812.         ENDIF
  1813.     ENDIF
  1814.     NEXT i%
  1815.  
  1816. RETURN_LOOKUPAPP:
  1817.  
  1818. END FUNCTION
  1819.  
  1820. '**
  1821. '** Purpose:
  1822. '**     Newest version 
  1823. '** Arguments:
  1824. '**     szVersion1$ - N.N.N.N version string 1 
  1825. '**     szVersion2$ - N.N.N.N version string 2 
  1826. '** Returns:
  1827. '**     If szVersion1$ > szVersion2$  return 0 
  1828. '**     If szVersion1$ = szVersion2$  return 1 
  1829. '**     If szVersion1$ < szVersion2$  return 2 
  1830. '*************************************************************************
  1831. FUNCTION IsNewer (szVersion1$, szVersion2$) STATIC AS INTEGER
  1832.  
  1833.     IF GetVersionNthField(szVersion1$,1) < GetVersionNthField(szVersion2$,1) THEN
  1834.     IsNewer = 2
  1835.     ELSEIF GetVersionNthField(szVersion1$,1) > GetVersionNthField(szVersion2$,1) THEN
  1836.     IsNewer = 0
  1837.     ELSE 
  1838.     IF GetVersionNthField(szVersion1$,2) < GetVersionNthField(szVersion2$,2) THEN
  1839.       IsNewer = 2
  1840.     ELSEIF GetVersionNthField(szVersion1$,2) > GetVersionNthField(szVersion2$,2) THEN
  1841.     IsNewer = 0
  1842.     ELSE
  1843.       IF GetVersionNthField(szVersion1$,3) < GetVersionNthField(szVersion2$,3) THEN
  1844.         IsNewer = 2
  1845.       ELSEIF GetVersionNthField(szVersion1$,3) > GetVersionNthField(szVersion2$,3) THEN
  1846.         IsNewer = 0
  1847.       ELSE
  1848.         IF GetVersionNthField(szVersion1$,4) < GetVersionNthField(szVersion2$,4) THEN
  1849.           IsNewer = 2
  1850.         ELSEIF GetVersionNthField(szVersion1$,4) > GetVersionNthField(szVersion2$,4) THEN
  1851.           IsNewer = 0
  1852.         ELSE
  1853.           IsNewer = 1
  1854.         END IF
  1855.       END IF
  1856.     END IF
  1857.     END IF
  1858.  
  1859. END FUNCTION
  1860.  
  1861. FUNCTION IsInstalled(szSection$,szKey$,szFile$,szPath$) STATIC AS INTEGER 
  1862.  
  1863.     IsInstalled = 0
  1864.     FILEPATH$= MakePath( szPath$, szFile$)
  1865.     IF DoesFileExist ( FILEPATH$, femExits) = 1 THEN
  1866.       MasterFileVersion$ = GetSectionKeyVersion(szSection$,szKey$)
  1867.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  1868.       IsInstalled = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  1869.     ENDIF
  1870.  
  1871. END FUNCTION
  1872.  
  1873. FUNCTION IsInstalled2(szSection$,szKey$,szFile$,szPath$) STATIC AS INTEGER 
  1874.  
  1875.     IsInstalled2 = 4
  1876.     FILEPATH$= MakePath( szPath$, szFile$)
  1877.     IF DoesFileExist ( FILEPATH$, femExists) = 1 THEN
  1878.       MasterFileVersion$ = GetSectionKeyVersion(szSection$,szKey$)
  1879.       DiskFileVersion$ = GetVersionOfFile( FILEPATH$)
  1880.       IsInstalled2 = IsNewer( DiskFileVersion$, MasterFileVersion$) 
  1881.     ENDIF
  1882.  
  1883. END FUNCTION
  1884.